package com.cnap.db.mapper;

import com.cnap.db.entity.IndicatorCasePO;
import com.cnap.db.entity.IndicatorPO;
import com.cnap.model.indicator.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 指标mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface IndicatorMapper {

    /**
     * 插入指标
     *
     * @param indicatorPO 指标
     * @return 结果
     */
    int insertIndicator(@Param("indicator") IndicatorPO indicatorPO);

    /**
     * 根据指标类型查询
     *
     * @param indicatorType 指标类型，算力cal，网络net
     * @param category      分类，AI 大数据
     * @param type          二级分类，AI：静态训练，动态训练，大数据：离线处理，实时处理
     * @return 结果
     */
    List<IndicatorPO> selectByIndicatorTypeAndCategoryAndType(@Param("indicatorType") String indicatorType, @Param(
            "category") String category, @Param("type") String type);

    /**
     * 根据指标类型查询
     *
     * @param category 分类，AI 大数据
     * @param type     二级分类，AI：静态训练，动态训练，大数据：离线处理，实时处理
     * @return 结果
     */
    List<IndicatorPO> selectByCategoryAndType(@Param("category") String category, @Param("type") String type);

    //    indicator_case

    /**
     * 插入指标实例
     *
     * @param indicatorCasePO 指标实例
     * @return 结果
     */
    int insertIndicatorCase(@Param("indicatorCase") IndicatorCasePO indicatorCasePO);

    /**
     * 根据应用id查询
     *
     * @param applicationId 应用id
     * @return 结果
     */
    List<IndicatorCasePO> selectByApplicationId(@Param("appId") String applicationId);

    /**
     * 根据应用id查询
     *
     * @param applicationId 应用id
     * @param indicatorType 指标类型 cal net
     * @return 结果
     */
    List<IndicatorCasePO> selectByApplicationIdAndIndicatorType(@Param("appId") String applicationId, @Param(
            "indicatorType") String indicatorType);

    /**
     * 根据应用id删除
     *
     * @param applicationId 应用id
     * @return 结果
     */
    int deleteByApplicationId(@Param("appId") String applicationId);

    /**
     * 根据微服务id删除
     *
     * @param svcId 微服务id
     * @return 结果
     */
    int deleteBySvcId(@Param("svcId") String svcId);

    /**
     * 批量插入指标实例
     *
     * @param indicatorPOS 列表
     * @return 结果
     */
    int batchInsertIndicatorCases(@Param("cases") List<IndicatorCasePO> indicatorPOS);

    /**
     * 条件查询
     *
     * @param queryIndicatorParam 参数
     * @return 结果
     */
    List<IndicatorPO> selectIndicatorByParam(@Param("queryParam") QueryIndicatorParam queryIndicatorParam);

    /**
     * 更新指标值
     *
     * @param indicatorId id
     * @param value       值
     * @return 结果
     */
    int updateIndicatorValueById(@Param("id") String indicatorId, @Param("value") String value);

    /**
     * 更新指标实例值
     *
     * @param indicatorCaseId id
     * @param value           值
     * @return 结果
     */
    int updateIndicatorcaseValueById(@Param("indicatorId") String indicatorCaseId, @Param("value") String value);

    /**
     * 模糊查询名称
     *
     * @param queryIndicatorNameParam 参数
     * @return 结果
     */
    List<String> selectLikeName(@Param("param") QueryIndicatorNameParam queryIndicatorNameParam);

    /**
     * 根据参数查询
     *
     * @param queryIndicatorCaseParam 参数
     * @return 结果
     */
    List<IndicatorCaseInfo> selectInfoByParam(@Param("param") QueryIndicatorCaseParam queryIndicatorCaseParam);

    /**
     * 根据参数更新实例值
     *
     * @param updateCaseParam 参数
     * @return 结果
     */
    int updateCaseByParam(@Param("param") UpdateCaseParam updateCaseParam);
}
